#pragma once

#include <gofcl_usbfs_daepint.h>

typedef struct {
	u32_s in_ep0_int : 1;
	u32_s in_ep1_int : 1;
	u32_s in_ep2_int : 1;
	u32_s in_ep3_int : 1;
	u32_s : 12;
	u32_s out_ep0_int : 1;
	u32_s out_ep1_int : 1;
	u32_s out_ep2_int : 1;
	u32_s out_ep3_int : 1;
	u32_s : 12;
} usbfs_daepint_expl_s;

_Static_assert(sizeof(usbfs_daepint_expl_s) == 4,
	       "Struct usbfs_daepint_expl_s defined error!");

static inline void usbfs_set_dev_ep_int_en(usbfs_daepint_expl_s daepint) {
	union {
		usbfs_daepint_expl_s e;
		usbfs_daepint_s d;
	} ed = {
		.e = daepint,
	};
	usbfs_wreg_daepinten_s(ed.d);
}

static inline usbfs_daepint_expl_s usbfs_get_dev_ep_int_en(void) {
	union {
		usbfs_daepint_expl_s e;
		usbfs_daepint_s d;
	} ed = {
		.d = usbfs_rreg_daepinten_s(),
	};
	return ed.e;
}

static inline usbfs_daepint_expl_s usbfs_get_dep_ep_int_flags(void) {
	union {
		usbfs_daepint_expl_s e;
		usbfs_daepint_s d;
	} ed = {
		.d = usbfs_rreg_daepint_s(),
	};
	return ed.e;
}
